package com.sc.nft.service.impl;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import com.sc.nft.dao.DigitalCollectionDao;
import com.sc.nft.dao.SaasTaskAwardDao;
import com.sc.nft.dao.SaasTaskAwardDetailsDao;
import com.sc.nft.dao.SaasTaskStageConditionsDao;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sc.nft.entity.DigitalCollection;
import com.sc.nft.entity.SaasTaskAward;
import com.sc.nft.entity.SaasTaskAwardDetails;
import com.sc.nft.entity.SaasTaskStageConditions;
import com.sc.nft.entity.dto.SaasTaskAwardDTO;
import com.sc.nft.entity.dto.SaasTaskAwardDetailsDTO;
import com.sc.nft.entity.dto.SaasTaskStageConfigurationListVO;
import com.sc.nft.entity.vo.SaasTaskStageConfigurationTaskListVO;
import com.sc.nft.entity.vo.SaasTaskStageConfigurationVO;
import com.sc.nft.service.SaasTaskAwardDetailsService;
import com.sc.nft.service.SaasTaskStageConditionsService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import javax.validation.Valid;
import java.util.ArrayList;
import java.util.List;

/**
 * 任务阶段达成条件表(SaasTaskStageConditions)表服务实现类
 *
 * @author 王伟成
 * @since 2024-04-12 18:35:26
 */
@Slf4j
@RequiredArgsConstructor
@Service
public class SaasTaskStageConditionsServiceImpl implements SaasTaskStageConditionsService {

    private final SaasTaskStageConditionsDao saasTaskStageConditionsDao;

    private final SaasTaskAwardDetailsDao saasTaskAwardDetailsDao;

    private final SaasTaskAwardDao saasTaskAwardDao;

    private final DigitalCollectionDao digitalCollectionDao;
    @Override
    public List<SaasTaskStageConfigurationListVO> stageConfigurationList(Long id) {
        return saasTaskStageConditionsDao.stageConfigurationList(id);
    }
    @Override
    public List<SaasTaskStageConfigurationTaskListVO> stageConfigurationTaskList(Long taskId) {
        List<SaasTaskStageConfigurationTaskListVO> list = new ArrayList<>();
        // 获取区间集合
        List<SaasTaskStageConditions> saasTaskStageConditions = saasTaskStageConditionsDao.getTaskId(taskId);
        // 循环区间
        saasTaskStageConditions.forEach(data -> {
            // 实例化一个区间的对象
            SaasTaskStageConfigurationTaskListVO saasTaskStageConfigurationTaskListVO = new SaasTaskStageConfigurationTaskListVO();
            // 基础参数
            saasTaskStageConfigurationTaskListVO.setId(data.getId());
            saasTaskStageConfigurationTaskListVO.setLowerLimit(data.getLowerLimit());
            saasTaskStageConfigurationTaskListVO.setUpperLimit(data.getUpperLimit());
            // 获取这个区间的任务奖励
            List<SaasTaskAward> byTaskIdAndStageId = saasTaskAwardDao.getByTaskIdAndStageId(taskId, data.getId());
            // 实例化区间任务奖励集合
            List<SaasTaskAwardDTO>saasTaskAwards=new ArrayList<>();
            byTaskIdAndStageId.forEach(saasTaskAward -> {
                SaasTaskAwardDTO saasTaskAwardDTO=new SaasTaskAwardDTO();
                saasTaskAwardDTO.setCollectionId(saasTaskAward.getCollectionId());
                saasTaskAwardDTO.setWeight(saasTaskAward.getWeight());
                DigitalCollection digitalCollection = digitalCollectionDao.getById(saasTaskAward.getCollectionId());
                if (BeanUtil.isNotEmpty(digitalCollection)) {
                    saasTaskAwardDTO.setFirstTitle(digitalCollection.getFirstTitle());
                }
                List<SaasTaskAwardDetails> byTaskAwardId = saasTaskAwardDetailsDao.getByTaskAwardId(saasTaskAward.getId());
                if (CollUtil.isNotEmpty(byTaskAwardId)) {
                    saasTaskAwardDTO.setAward(BeanUtil.copyToList(byTaskAwardId, SaasTaskAwardDetailsDTO.class));
                }
                saasTaskAwards.add(saasTaskAwardDTO);
            });
            saasTaskStageConfigurationTaskListVO.setList(saasTaskAwards);
            list.add(saasTaskStageConfigurationTaskListVO);
        });
        return list;
    }
}
